<?php

function authcheck($rule, $uid, $type = 1, $mode = 'url', $relation = 'or')
{
    if (in_array(session("uid"), C("ADMINISTRATOR"))) {
        return true;
    }
    $auth = new \Think\Auth();
    return $auth->check($rule, $uid, $type, $mode, $relation) ? true : false;

}

//检查商户是否2018-9-1之前创建
function check_momach($id){
    $Momerchant = new \app\common\model\Momerchant();
    $mo = $Momerchant->where('id',$id)->field('id,addtime')->find();
    if ($mo['addtime'] > 1535731200){
        $res = false;
    }else{
        $res = true;
    }
    return $res;
}

function getqxlevel($qx){
    switch ($qx){
        case '1':
            $data="系统账户";
            break;
        case '2':
            $data="代理商";
            break;
        case '3':
            $data="店长";
            break;
        case '4':
            $data="店员";
            break;
        case '7':
            $data="代理商BD";
            break;
        default:
            $data="其他人员";


    }
    return $data;



}

function object_array($array)
{
    if (is_object($array)) {
        $array = (array)$array;
    }
    if (is_array($array)) {
        foreach ($array as $key => $value) {
            $array[$key] = object_array($value);
        }
    }
    return $array;
}

//获取来源
function getsource($id){
    switch ($id){
        case '1':
            $data="后台";
            break;
        case '2':
            $data="在线充值";
            break;
        case '3':
            $data="扫码支付";
            break;
        case '4':
            $data="APP";
            break;
        case '7':
            $data="奖励";
            break;
        case '8':
            $data="小程序";
            break;
        case '9':
            $data="客户端";
            break;
        default:
            $data="其他";
    }
    return $data;

}

//卡券抵扣详情
function getdeduzkinfo($arr,$card_zk){
    $arr = json_decode($arr, JSON_UNESCAPED_UNICODE);
    $CardGeneral = new \app\common\model\CardGeneral();
    if (is_array($arr)) {
        foreach ($arr as $k => $v) {
            if (isset($v['card_id'])) {
                $datas[$k] = $CardGeneral->where(['card_id' => $v['card_id']])->value('title');
            } else {
                $datas = [];
            }
        }
    }else{
        $datas = [];
    }

    if ($datas) {
        $data = implode(',', $datas).'('.$card_zk.'元)';
    } else {
        $data = NULL;
    }
    return $data;
}
//获取来源
//function getcate($id){
//    switch ($id){
//        case '1':
//            $data="充值";
//            break;
//        case '2':
//            $data="消费";
//            break;
//        case '3':
//            $data="充值赠送";
//            break;
//        case '4':
//            $data="消费赠送";
//            break;
//        case '5':
//            $data="激活赠送";
//            break;
//        case '6':
//            $data="等级赠送";
//            break;
//        case '7':
//            $data="分享赠送";
//            break;
//        case '8':
//            $data="同步数据";
//            break;
//        case '9':
//            $data="积分兑换";
//            break;
//        default:
//            $data="其他";
//    }
//    return $data;
//
//}

//function addlog($mid, $log, $leixing)
//{
//    $data['mid'] = $mid;
//    $data['log'] = $log;
//    $data['leixing'] = $leixing;
//    $data['user'] = session('username');
//    $data['addtime'] = time();
//    $add = M('czlog')->add($data);
//}

//function getmachstatu($zt)
//{
//    switch ($zt) {
//        case 0:
//            echo "营业中";
//            break;
//        case 1:
//            echo "暂停营业";
//            break;
//    }
//}

function getagent($uid, $fs)
{
    $agent=new \app\common\model\Agent();
    $map['id'] = $uid;
    $agent =$agent->where($map)->find();

    switch ($fs) {
        case "name":
            return $agent['name'];
            break;
        case "zh":
            $Loginusers=new \app\common\model\LoginUsers();
            $zh = $Loginusers->where(array('id' => $agent['uid']))->value('username');
            return $zh;
            break;

    }
    //return $agent;
}

////获取母商户
//function getmomach($top_mid, $type = ''){
//    $Momerchant = new \app\common\model\Momerchant();
//    $map['id'] = $top_mid;
//    $info = $Momerchant->where($map)->find();
//    switch ($type){
//        case "name":
//            return $info['merchant_name'];
//            break;
//    }
//}

//function getagentid($agent){
//    $map['name']=$agent;
//    $agents = M('agent')->where($map)->getfield('id');
//    return $agents;
//}
//function getagentjb($level)
//{
//    $map['id']=$level;
//    $le=M('agentlevel')->where($map)->getField('name');
//    return $le;
//
//
//}
//function is_tel($mobile) {
//    if (!is_numeric($mobile)) {
//        return false;
//    }
//    return preg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,5,6,7,8]{1}\d{8}$|^18[\d]{9}$#', $mobile) ? true : false;
//}
//function getlevel($id){
//    $cate=new \app\common\model\MerchantCate();
//    $map['id']=$id;
//    $level=$cate->where($map)->value('level');
//    return $level;
//}
//function get_mer_mid(){
//    $map['merchant']=$merchant;
//    $mid=M('user')->where($map)->getField('id');
//    return $mid;
//}

//function getagentmid($uid){
//    $map['uid']=$uid;
//    $mab['agent']=M('agent')->where($map)->getField('id');
//    $mid=M('user')->where($mab)->field('id')->select();
//    if($mid){
//        foreach($mid as $k=>$v){
//            $mid2[]=$v['id'];
//        }
//        return implode(',',$mid2);}
//    else{
//        return '';
//    }
//}
//function getsalesmid(){
//
//    $map['tel']=M('sysuser')->where(array('id'=>session('uid')))->getField('username');
//    $mab['salesman']=M('salesman')->where($map)->getField('id');
//    $mid=M('user')->where($mab)->field('id')->select();
//
//    foreach($mid as $k=>$v){
//        $mid2[]=$v['id'];
//    }
//    return implode(',',$mid2);
//
//}
//function getmchmid(){
//
//
//}

// 参数解释
// $string： 明文 或 密文
// $operation：DECODE表示解密,其它表示加密
// $key： 密匙
// $expiry：密文有效期
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
// 动态密匙长度，相同的明文会生成不同密文就是依靠动态密匙
    $ckey_length = 4;

// 密匙
    $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);

// 密匙a会参与加解密
    $keya = md5(substr($key, 0, 16));
// 密匙b会用来做数据完整性验证
    $keyb = md5(substr($key, 16, 16));
// 密匙c用于变化生成的密文
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length):
        substr(md5(microtime()), -$ckey_length)) : '';
// 参与运算的密匙
    $cryptkey = $keya.md5($keya.$keyc);
    $key_length = strlen($cryptkey);
// 明文，前10位用来保存时间戳，解密时验证数据有效性，10到26位用来保存$keyb(密匙b)，解密时会通过这个密匙验证数据完整性
// 如果是解码的话，会从第$ckey_length位开始，因为密文前$ckey_length位保存 动态密匙，以保证解密正确
    $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) :
        sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
    $string_length = strlen($string);
    $result = '';
    $box = range(0, 255);
    $rndkey = array();
// 产生密匙簿
    for($i = 0; $i <= 255; $i++) {
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);
    }
// 用固定的算法，打乱密匙簿，增加随机性，好像很复杂，实际上对并不会增加密文的强度
    for($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
// 核心加解密部分
    for($a = $j = $i = 0; $i < $string_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
// 从密匙簿得出密匙进行异或，再转成字符
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    }
    if($operation == 'DECODE') {
// substr($result, 0, 10) == 0 验证数据有效性
// substr($result, 0, 10) - time() > 0 验证数据有效性
// substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性
// 验证数据有效性，请看未加密明文的格式
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) &&
            substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
            return substr($result, 26);
        } else {
            return '';
        }
    } else {
// 把动态密匙保存在密文里，这也是为什么同样的明文，生产不同密文后能解密的原因
// 因为加密后的密文可能是一些特殊字符，复制过程可能会丢失，所以用base64编码
        return $keyc.str_replace('=', '', base64_encode($result));
    }
}

//function getmarchimg($mid){
//    $map['id']=$mid;
//    $user=M('user')->where($map)->getField('img');
//    return $user;
//}

//function getcard($card_id,$type){
//    swiTch ($type) {
//        case '0':
//            $res = M('Wxusercard')->where(['card_id'=>$card_id])->getField('title');
//            $rest =  $res;
//            break;
//    }
//    return $rest;
//}



////获取核销数据
//function getcount($arr,$type){
//    $map['mid'] = $arr;
//    switch ($type){
//        case '0':
//            $res = M('wxuserupdate')->where($map)->sum('add_balance');
//            break;
//        case '1':
//            $res = M('wxuserupdate')->where($map)->sum('add_bonus');
//            break;
//        case '2':
//            $res = M('wxuserupdate')->where($map)->count();
//            break;
//    }
//    return $res;
//}

////获取积分商城数据
//function getgoods($arr,$type){
//    $map['mid'] = $arr;
//    switch ($type){
//        case '0':
//            $res = M('order')->where($map)->count();
//            break;
//        case '1':
//            $res = M('order')->where($map)->sum('price');
//            break;
//    }
//    return $res;
//}
//
////获取订单信息
//function getorder($arr,$type){
//    $map['id'] = $arr;
//    switch($type){
//        case "0":
//            $res = M('goods')->where($map)->getField('img');
//            break;
//        case "1":
//            $res = M('goods')->where($map)->getField('name');
//            break;
//
//    }
//    return $res;
//}